<?php
	include_once '../../include/inc_session.php';
	
	// construction de l’objet Template
	$oPageListe = new Template(PATH_TEMPLATE.'tpl_list_modcont.html');
	
	//remplacement simple
	$oPageListe->replace('nom_module', $oBloc->_MENU_NOM);
	$oPageListe->replace('nom_fonction', $oFonction->_MENU_AFFICHE);
	$oPageListe->replace('nom_liste','Liste des intervenants');
	
	$oContrat = new dataObject_contrat();
	//var_dump($_SESSION);
	//***** TRAITEMENT BOUTON RETOUR DE L'ÉCRAN DE MODIFICATION CONTRACTUELLE****/
	if(isset($_GET['retour']) && $_GET['retour']==1)
	{
		//si une modif a été enregistrée
		if(($_SESSION['personneCreerRat']==1) || ($_SESSION['personneRadier']==1) || ($_SESSION['personneSubstu']==1) || ($_SESSION['paieModifCreer']==1) )
		{
			$oConnexionBis = new CDatabaseMysql();
			$oEvenement = new dataObject_evenement();
			/**
			 * Si une modification a été faite sur un des éléments du contrat, 
			 * créer un évènement de type acte de gestion, 
			 * sous type modification contractuelle contrat.
			 */
			$oEvenement->_TYPE_EVENT 				= 'G';
			$oEvenement->_SOUS_TYPE_EVENT			= 'AMC';
			$oEvenement->_MOTIF_EVENT 				= null;
			$oEvenement->_REFERENCE_EVENT			= null;
			$oEvenement->_DATE_EVENT				= date('Y-m-d');//$_SESSION['dateeffet_contrat'];
			$oEvenement->_IDENTIFIANT_AGENT			= $_SESSION['iduser'];
			$oEvenement->_IDENTIFIANT_SINISTRE		= null;
			$oEvenement->_IDENTIFIANT_CONTRAT		= $_SESSION['idcontrat'];
			$oEvenement->_IDENTIFIANT_PERSONNE		= null;
			$oEvenement->_IDENTIFIANT_ECHEANCE		= null;
			$oEvenement->_IDENTIFIANT_PRESTATION	= null;
	
			$oConnexionBis->beginTransaction();
			$idEv = $oEvenement->evenement_insert();
			
			if($idEv)//SI L'ÉVÉNEMENT EST INSERRÉ
			{
				/**
				 * Si un justificatif a été créé ou modifié pour le contrat, 
				 * alimenter l’identifiant évènement avec celui créé pour la modification contractuelle, 
				 * modifier le justificatif.
				 */
				//$_SESSION['justifModifCreer'] : CONTIENT LES IDENTIFIANT DES JUSTIFICATIFS CRÉS OU MODIFIÉS
				$bUpdBoucle = true;
				
				if(!empty($_SESSION['justifModifCreer']))
				{
					foreach($_SESSION['justifModifCreer'] as $idJust)
					{
						$oJustificatif = new dataObject_justificatif($idJust);
						$oJustificatif->_IDENTIFIANT_EVENEMENT = $idEv;
						
						$bUpd = $oJustificatif->justificatif_update();
						if($bUpd===false)
						{
							$bUpdBoucle = false;
						}
					}//FIN foreach
				}
				
				//SI un JUSTIFICATIF n'est pas modifié ON FAIT LE rollback.
				if($bUpdBoucle===false)
				{
					$oConnexionBis->rollback();
					$oForm->ajouterErreur(contrat_maj_justificatif_probleme);
				}
				else 
				{
					/**
					 * 3 - Si une modification a été faite sur un des éléments du contrat, 
					 * créer un évènement de type financier, 
					 * sous type règlement première échéance
					 */
						if($_SESSION['paieModifCreer']==1)
						{
							$oEvenement->_TYPE_EVENT 				= 'F';
							$oEvenement->_SOUS_TYPE_EVENT			= 'FRE';
							$oEvenement->_MOTIF_EVENT 				= null;
							$oEvenement->_REFERENCE_EVENT			= $_SESSION["ORR_refreglement"];
							$oEvenement->_DATE_EVENT				= date('Y-m-d');
							$oEvenement->_IDENTIFIANT_AGENT			= $_SESSION['iduser'];
							$oEvenement->_IDENTIFIANT_SINISTRE		= NULL;
							$oEvenement->_IDENTIFIANT_CONTRAT		= $_SESSION['idcontrat'];
							$oEvenement->_IDENTIFIANT_PERSONNE		= null;
							$oEvenement->_IDENTIFIANT_ECHEANCE		= null;
							$oEvenement->_IDENTIFIANT_PRESTATION	= null;
					
							$bIdEv = $oEvenement->evenement_insert();
							if($bIdEv)
							{//SI L'ÉVÉNEMENT EST INSERRÉ
								$oConnexionBis->commit();
								header('Location:../../menu.php?retour=0&modcontrac=1');
							}
							else
							{
								$oConnexionBis->rollback();
								$oForm->ajouterErreur(contrat_creer_evenement_reglementfirstecheance_probleme);
							}
						} //fin crea event pour paiement
						else
						{
							$oConnexionBis->commit();
							header('Location:../../menu.php?retour=0&modcontrac=1');
						}
				}
				
			}
			else //EN CAS DE PROBLÈME DE CRÉATION D'ÉVENEMENT Mod contract
			{
				$oConnexionBis->rollback();
				$oForm->ajouterErreur(contrat_creer_evenement_probleme);
			}
		}
		else //click sur retour alors qu'aucune action n'a été effectué
		{
			header('Location:../../menu.php?retour=0&modcontrac=1');
		}
	}
	//*************** FIN TRAITEMENT BOUTON RETOUR ********//	
	
	/**
	 * RADIATION INTERVENANT
	 */
	if(isset($_GET['action']) && ($_GET['action']==1)  &&  isset($_GET['Identifiant_personne']) && isset($_SESSION['identifiant_contrat']))
	{
		
		$nIdPersonne = $_GET['Identifiant_personne'];
		$nIdCont = $_SESSION['identifiant_contrat'];
		$idRole = $_GET['idrole'];
		
		$oPersonneRadier = new dataObject_personne();
		//$aTypeRolePersonne = $oPersonneRadier->personne_getTypeRoleFromIdPersonne($nIdPersonne);
		//FS cas ou mm personne joue 2 role sur le contrat, la methode precedente ne renvoie pas les bonnes données
		$aTypeRolePersonne = $oPersonneRadier->personne_getTypeRoleFromIdRole($idRole);
		
		if($aTypeRolePersonne == "S")
		{
			$oForm->ajouterErreur(contrat_radier_souscripteur);
		}
		else
		{//('A','B','P')
			$aAssure = $oContrat->contrat_getListAssureActif($nIdCont);
			
			if( ($aTypeRolePersonne == "A") && isset($aAssure) && count($aAssure)==1)
				$oForm->ajouterErreur(modcontrat_radier_assure_unique);
			else
			{
				$nResult = $oPersonneRadier->personne_Radier($nIdCont, $nIdPersonne, $aTypeRolePersonne);
			
				switch($nResult)
				{
					case 0:
						$oForm->ajouterErreur(contrat_radier_intervenant_pbm);
						break;
						
					case 1:
						//on verifie si les garanties n'etaient pas déja inactif
						$oGarantieSousc = new dataObject_garantieSouscrite();
						$aInf = $oGarantieSousc->garantieSouscrite_select(" and Identifiant_personne= '".$nIdPersonne."' AND Identifiant_contrat= '".$nIdCont."'");
						if(!empty($aInf) ) 
						{
							$bUpd = true;
							foreach($aInf as $aRow)
							{
								if($aRow['Etat_garantie_souscrite'] != 'I')
									$bUpd = false;
							}
							if(!$bUpd) $oForm->ajouterErreur(contrat_radier_garantisouscrite);
							else $_SESSION['personneRadier'] = 1;
						}
						else
							$oForm->ajouterErreur(contrat_radier_garantisouscrite);
						break;
					
					case 2:
						//on verifie si la clause benef n'etait pas déja à 'A'
						$aInf = $oContrat->contrat_select(" AND Clause_beneficiaire_contrat = 'A' AND Identifiant_contrat='".$nIdCont."'");
						if(empty($aInf) ) 
							$oForm->ajouterErreur(contrat_radier_beneficiaire);
						else $_SESSION['personneRadier'] = 1;
						break;
	
					default:
						$_SESSION['personneRadier'] = 1;
						break;
				}
			}
		}
		
	}//fin traitement radiation
	
	/**
	 * SUBSTITUTION INTERVENANT
	 */
	if(isset($_GET['action']) && ($_GET['action']==2)  &&  isset($_GET['Identifiant_personne']) && isset($_SESSION['identifiant_contrat']))
	{
		$nIdPersonne = $_GET['Identifiant_personne'];
		$nIdCont = $_SESSION['identifiant_contrat'];
		$nNumContrat = $_SESSION['numero_contrat'];
		
		$idRole = $_GET['idrole'];
		
		$oPersonneRadier = new dataObject_personne();
		//$aTypeRolePersonne = $oPersonneRadier->personne_getTypeRoleFromIdPersonne($nIdPersonne);
		//FS cas ou mm personne joue 2 role sur le contrat, la methode precedente ne renvoie pas les bonnes données
		$aTypeRolePersonne = $oPersonneRadier->personne_getTypeRoleFromIdRole($idRole);
		
		if($aTypeRolePersonne == "S")
		{
			$oForm->ajouterErreur(contrat_substitu_souscripteur);
		}else
		{//('A','B','P')
			$nResult = $oPersonneRadier->personne_Radier($nIdCont, $nIdPersonne, $aTypeRolePersonne);
			
			switch($nResult)
			{
				case 0:
					$oForm->ajouterErreur(contrat_radier_intervenant);
					break;
					
				case 1:
					//on verifie si les garanties n'etaient pas déja inactif
					$oGarantieSousc = new dataObject_garantieSouscrite();
					$aInf = $oGarantieSousc->garantieSouscrite_select(" and Identifiant_personne= '".$nIdPersonne."' AND Identifiant_contrat= '".$nIdCont."'");
					if(!empty($aInf) ) 
					{
						$bUpd = true;
						foreach($aInf as $aRow)
						{
							if($aRow['Etat_garantie_souscrite'] != 'I')
								$bUpd = false;
						}
						if(!$bUpd) $oForm->ajouterErreur(contrat_radier_garantisouscrite);
						else 
						{
							unset($_SESSION['IdPers']);
							$_SESSION['personneSubstu'] = 1;
							header("Location:recherchepersonne.php?modcontrac=".$nNumContrat);
						}
					}
					else
						$oForm->ajouterErreur(contrat_radier_garantisouscrite);
					break;
				
				case 2:
					//on verifie si la clause benef n'etait pas déja à 'A'
					$aInf = $oContrat->contrat_select(" AND Clause_beneficiaire_contrat = 'A' AND Identifiant_contrat='".$nIdCont."'");
					if(empty($aInf) ) 
						$oForm->ajouterErreur(contrat_radier_beneficiaire);
					else 
					{
						unset($_SESSION['IdPers']);
						$_SESSION['personneSubstu'] = 1;
						header("Location:recherchepersonne.php?modcontrac=".$nNumContrat);
					}
					break;

				default: //SI TOUT SE PASSE BIEN ON PASSE À LA CRÉATION DE LA PERSONNE (SUBSTITUANT)
					unset($_SESSION['IdPers']);
					$_SESSION['personneSubstu'] = 1;
					header("Location:recherchepersonne.php?modcontrac=".$nNumContrat);
					break;
			}
		}
	}//fin traitement substitution
	
	
	/*
	 * faire un contrôle pour tenir compte du cas ou le champ est vide au départ.
	 */
	//récuperation du numéro du contrat
	$CONTRAT_NUM = '';
	if(isset($_POST['ONN_num_contrat']))
	{
		$CONTRAT_NUM = htmlentities($_POST['ONN_num_contrat']);
		//on reinitialise l'url
		if(isset($_GET['action'])) header('location:index.php?idc='.$CONTRAT_NUM);
		if(isset($_GET['idc'])) $_GET['idc'] = $CONTRAT_NUM;
	}
	else
	{
		if(isset($_GET['idc'])) $CONTRAT_NUM = $_GET['idc'];
	}
	
	$_SESSION['numcont'] = $CONTRAT_NUM;
	
	if($gbFormValid || isset($_GET['idc'])) //données du formulaire validées, on fait la mise à jour
	{
		$oContrat->_NUMERO = $CONTRAT_NUM;
		
		$nIdContratEncours = $oContrat->contrat_getIdFromNumContrat($oContrat->_NUMERO);
		
		$oContratEncours = new dataObject_contrat($nIdContratEncours);
		$asFP = $oContratEncours->getFormuleProduitOffreDuContrat($nIdContratEncours);
		
		//VARIABLES SESSION CONCERNANT LES ELEMENTS DU CONTRAT
		$_SESSION['modcontrac'] = $CONTRAT_NUM;//n'etait pas réinitialisé apres nouvelle recherche
		$_SESSION['identifiant_contrat'] 		= $nIdContratEncours;
		$_SESSION['idcontrat'] 					= $nIdContratEncours;
		$_SESSION['numero_contrat'] 			= $oContratEncours->_NUMERO;
		$_SESSION['dateeffet_contrat']  		= $oContratEncours->_DATE_EFFET;
		$_SESSION['clausebeneficiaire_contrat'] = $oContratEncours->_CLAUSE_BENEFICIAIRE;
		$_SESSION['dateecheance_contrat'] 		= $oContratEncours->_DATE_ECHEANCE;
		$_SESSION['freqencepaiement_contrat'] 	= $oContratEncours->_FREQUENCE_PAIEMENT;
		$_SESSION['etat_contrat'] 				= $oContratEncours->_ETAT;
		$_SESSION['formule']    				= $asFP[0]['Identifiant_formule'];
		$_SESSION['produit']    				= $asFP[0]['Identifiant_produit'];
		$_SESSION['offre']      				= $asFP[0]['Identifiant_offre'];
		
		//on cherche sil y a des garanties optionnelles pour afficher le bouton
		$oProd = new dataObject_produit();
        $bGarantOptionnel = $oProd->produit_isGarantieOptionnelleExist($_SESSION['produit']);
        $_SESSION['gar_optionnel'] = $bGarantOptionnel;
		
		/*
		 * LES MODIFICATIONS POSSIBLES SUR LE CONTRAT
		 * - Création ou modification d'un intervenant (soit la personne est créée via le formulaire ou bien on le rattache avec l'option recherche)
		 * - Radier un intervenant
		 * - Substituer un intervenant
		 * - Modifier ou créer un paiement
		 */
        if(!isset($_SESSION['personneCreerRat']))	$_SESSION['personneCreerRat'] 	= 0; // POUR LA CRÉATION D'UNE PERSONNE
		if(!isset($_SESSION['personneRadier']))	$_SESSION['personneRadier'] 	= 0; // POUR LA RADIATION D'UNE PERSONNE
		if(!isset($_SESSION['personneSubstu']))	$_SESSION['personneSubstu'] 	= 0; // POUR LA SUBSTITUTION D'UNE PERSONNE
		if(!isset($_SESSION['paieModifCreer']))	$_SESSION['paieModifCreer'] 	= 0; // POUR LA CREATION OU MODIFICATION Du PAIEMENT
		if(!isset($_SESSION['justifModifCreer']))	$_SESSION['justifModifCreer'] 	= array(); // POUR LA CREATION OU MODIFICATION DE JUSTIFICATIF
	}
	

	if(isset($_GET['idc']))
	{
		$oContrat->_NUMERO = $_GET['idc'];
		$_SESSION['numcont'] = $_GET['idc'];
	}
	
	// construction du formulaire
	$asInputs = array(array('label_input'=>'N&#176; CONTRAT :','input_name'=>'ONN_num_contrat', 'input_value'=> $oContrat->_NUMERO, 'maxlength'=>'20', 'class'=>'resize_1')); 
	   					  
	$oPageListe->iterateReplace('champ_input', $asInputs);	
	
	/*
	 * Contruction de l'entête du tableau.
	 */
	$aEnteteTab = array(
						array("num_colonne"=>2, "nom_colonne"=>"ROLE"),
						array("num_colonne"=>3, "nom_colonne"=>"TYPE ASSURE"),
						array("num_colonne"=>4, "nom_colonne"=>"NOM"),
						array("num_colonne"=>5, "nom_colonne"=>"PRENOM")
					    );
					    
	$oPageListe->iterateReplace('colonne', $aEnteteTab );

	/*
	 * Contruction du contenu du tableau
	 */
	//Récupération de l'identifiant du contrat
	if($oContrat->_NUMERO != "")
	{
		$Idcontrat = $oContrat->contrat_getIdFromNumContrat($oContrat->_NUMERO);
	}
	else
	{
		$Idcontrat = 0;
	}
	
	//Vérification de l'existance du contrat.
	$oi = $oContrat->contrat_search($Idcontrat);
	if($oi == 0 && $gbFormValid)
	{
		$oForm->ajouterErreur(contrat_inexistant_old);
	}
	
	//Vérification de l'état du contrat
	$oi = $oContrat->contrat_resilier($Idcontrat);
	if($oi >0 && $gbFormValid)
	{
		$oForm->ajouterErreur(contrat_resilie_old);
	}
	//SI LE CONTRAT EXISTE
	else if($Idcontrat > 0)
	{
		//Récupération des intervenants au contrat
		$asBlocs = $oContrat->contrat_getListIntervenant($Idcontrat);
		$aList = array();
		$oElementDico = new dataObject_elementdico();
		
		foreach($asBlocs as $iKey => $aRow)
		{
			$aContenu = array("id_ligne"=> $aRow["Identifiant_personne"]."&idrole=".$aRow["Identifiant_role"]);
			if(($iKey+1)%2==0) $aContenu = array_merge($aContenu, array("color"=> "color"));
		
			$sLibRole = dataObject_elementdico::elementdico_getNomFromCode($aRow["Type_role"], dataObject_dictionnaire::_TYPE_ROLE);
			$sLibTypeAssure = dataObject_elementdico::elementdico_getNomFromCode($aRow["Type_assure"], dataObject_dictionnaire::TYPE_ASSURE);
			
			$aContenu = array_merge($aContenu, array("num_colonne_2"=>2, "val_ligne_2"=> htmlentities($sLibRole, ENT_COMPAT, 'utf-8')));
			$aContenu = array_merge($aContenu, array("num_colonne_3"=>3, "val_ligne_3"=> htmlentities($sLibTypeAssure, ENT_COMPAT, 'utf-8')));
			$aContenu = array_merge($aContenu, array("num_colonne_4"=>4, "val_ligne_4"=> htmlentities($aRow["Nom_personne"], ENT_COMPAT, 'utf-8')));
			$aContenu = array_merge($aContenu, array("num_colonne_5"=>5, "val_ligne_5"=>htmlentities($aRow["Prenom_personne"], ENT_COMPAT, 'utf-8')));
			
			$aList[$iKey] =  $aContenu;
				
		}
		$oPageListe->iterateReplace('tablist', $aList);
		
	}
	
	if($CONTRAT_NUM !="")
	{
		$oPageListe->replace('url_Recherche', "recherchepersonne.php?modcontrac=".$oContrat->_NUMERO);	
	}
	else
	{
		$oPageListe->replace('url_Recherche', "#");
	}
	//FS on applique le meme test que precedement
	//if(isset($_GET['idc']) && ($oContrat->_NUMERO != ""))
	if($CONTRAT_NUM !="")
	{
		//$oPageListe->replace('url_Creer', "addtpersonne.php?modcontrac=".$oContrat->_NUMERO);
		$oPageListe->replace('url_Creer', "recherchepersonne.php?modcontrac=".$oContrat->_NUMERO);
		
	}else
	{
		$oPageListe->replace('url_Creer', "#");
	}
	//$oPageListe->replace('url_Retour', "../../menu.php?retour=0&modcontrac=1");
	$oPageListe->replace('url_Retour', "index.php?retour=1");
	
	$oPageListe->replace('url_radier','?action=1&idc='.$_SESSION['numcont'].'&Identifiant_personne=');
	
	$oPageListe->replace('url_substituer','?action=2&idc='.$_SESSION['numcont'].'&Identifiant_personne=');
	
	$oPageListe->replace('url_visualiser','editpersonne.php?idc='.$_SESSION['numcont'].'&Identifiant_personne=');
	
	if(isset($_SESSION['identifiant_contrat']))
	{
		$sPaiement = (isset($_SESSION['paiement'])) ? $_SESSION['paiement'] : 0;
		$oPageListe->replace('url_paiement','paiementmc/index.php?modcontrac='.$oContrat->_NUMERO.'&paiement='.$sPaiement.'&idpai=');
	}
	else
	{
		$oPageListe->replace('url_paiement','#');
	}
	
	if(isset($_SESSION['identifiant_contrat']) && ($_SESSION['identifiant_contrat']!=null) && isset($_GET['paie']) && ($_GET['paie']==1))
	{
		$oPageListe->replace('checked','checked=checked');
	}else
	{
		$oPageListe->replace('checked','');
	}
	
	/******* Affichage des Messges ******/
	$oPageListe->iterateReplace('messages', $oForm->getValidMessage());
	
	/***** affichage de la page *****/
	echo $oPageListe->toString();
		
	include_once PATH_INCLUDE.'inc_pied_page.php';
?>